package com.ihr360.payroll.model.dto.salary.projection.salary.plan;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.ihr360.authority.sharing.model.IResourceControl;
import com.ihr360.payroll.model.dto.salary.plan.SalaryPlan;
import com.ihr360.payroll.model.dto.salary.plan.config.PayslipConfig;
import com.ihr360.payroll.model.vo.AttendancePlanVo;
import com.ihr360.payroll.model.vo.MergerTaxPlanVo;
import com.ihr360.payroll.model.vo.PayrollConfigVo;
import com.ihr360.rest.core.Ihr360Projection;

import java.util.List;

/**
 * @author tomtao
 */
@Ihr360Projection(name = "salaryPlanProjection", types = {SalaryPlan.class})
public interface SalaryPlanProjection extends IResourceControl {

    Long getId();

    String getName();

    String getRemark();

    @JsonProperty("systemTemplate")
    boolean getIsSystemTemplate();

    int getStaffNumber();

    int getPayPeriodStaffNumber();

    @JsonProperty(value = "mergerTaxPlan")
    MergerTaxPlanVo getMergerTaxPlanVo();

    @JsonProperty(value = "payrollConfig")
    PayrollConfigVo getPayrollConfigVo();

    @JsonProperty(value = "attendancePlan")
    AttendancePlanVo getAttendancePlanVo();

    boolean isEnabled();

    boolean isMonthCycle();

    Integer getCalculateCycleMonth();

    Integer getCalculateCycleDay();

    Integer getAttendanceCycleMonth();

    Integer getAttendanceCycleDay();

    Integer getSalaryMonth();

    @JsonProperty("referenceBenefitData")
    boolean isReferenceBenefitData();

    List<PayslipConfig> getPayslipConfigs();

}
